home *** CD-ROM | disk | FTP | other *** search
-
- #include <stdio.h>
- #include <string.h>
- #include <ctype.h>
-
- #include "control.h"
- #include "fileinfo.h"
- #include "keyword.h"
- #include "xref.h"
-
- dfCONTROL control;
- dfFILEINFO fileinfo;
- dfKEYWORD keyword;
- dfXREF xref;
-
- int no_keys = 0;
- int no_dups = 0;
-
- void read_control(void)
- {
- control.key = 0;
- if (control.find() == -1)
- {
- control.next_keyno = 0;
- control.next_fileno = 0;
- control.insert();
- }
- }
-
- #define WHITESPACE "()<>,.{}!\"£$%^&*[]-_=+`¬?/\\|~#'@;: \t"
-
- void add_keyword(char *key)
- {
- char *a = key;
- for (int x = 0; x < 10; x++, a++)
- {
- if (!isalpha(*a) || *a < 0)
- break;
- }
- if (x < 4)
- return;
- strncpy(keyword.name, key, x);
- keyword.name[x] = 0;
- strupr(keyword.name);
- if (keyword.find() == -1)
- {
- no_keys++;
- keyword.keyno = control.next_keyno++;
- control.amend();
- keyword.insert();
- }
- else
- no_dups++;
- xref.fileno = fileinfo.fileno;
- xref.keyno = keyword.keyno;
- if (xref.find() == -1)
- xref.insert();
- }
-
- void process(const char *fname)
- {
- FILE *fp = fopen(fname, "rt");
- if (fp == NULL)
- return;
- strncpy(fileinfo.path, fname, 65);
- fileinfo.path[65] = 0;
- if (fileinfo.find() != -1)
- return;
- fileinfo.fileno = control.next_fileno++;
- control.amend();
- fileinfo.insert();
- char buffer[200];
- while (fgets(buffer, 199, fp) != NULL)
- {
- buffer[199] = 0;
- char *a = buffer;
- if (isalpha(*a) && *a >= 0)
- add_keyword(a);
- for (; *a != 0 && *a != '\n'; a++)
- {
- if (isalpha(*a) && *a >= 0)
- continue;
- if (strchr(WHITESPACE, *a) == NULL)
- continue;
- if (!isalpha(*(a + 1)) || *(a + 1) < 0)
- continue;
- add_keyword(a + 1);
- }
- }
- fclose(fp);
- }
-
- int main(int argc, char *argv[])
- {
- read_control();
- for (int x = 1; x < argc; x++)
- {
- strupr(argv[x]);
- fprintf(stderr, "Adding File: %s\n", argv[x]);
- process(argv[x]);
- }
- fprintf(stderr, "No Keys Added: %d\nNo Dupes Rejected: %d\n", no_keys, no_dups);
- return 0;
- }
-
-